const path = require('path')
const HtmlWebpackPlugin = require('html-webpack-plugin')
module.exports = {
  // 打包模式
  // 一共两个值，分别是 production(生产) 和 development(开发)
  mode: 'production',
  // 入口
  entry: './src/main.js',
  // 出口
  output: {
    // 目录名
    path: path.join(__dirname, 'dist'), // 绝对路径
    // 文件名
    filename: 'bundle.js'
  },
  // 插件
  plugins: [
    // 插件是一个构造函数
    new HtmlWebpackPlugin({
      // 以./public/index.html为原版复制一份到dist目录下
      template: './public/index.html'
    })
  ],
  // 处理不同类型的模块(文件)
  module: {
    rules: [
      {// 处理css模块
        test: /\.css$/,
        // 多个loader的执行顺序是从后往前的
        use: ['style-loader', 'css-loader']
      }, {// 处理less模块
        test: /\.less$/,
        // 多个loader的执行顺序是从后往前的
        use: ['style-loader', 'css-loader', 'less-loader']
      }, {// 处理图片模块
        test: /\.(png|jpe?g|gif|webp|svg)$/,
        type: 'asset',// 用asset内置的资源类型处理图片
        generator: {
          // 打包的图片存放路径
          // [hash:20]: 用20位随机字符串作为打包的图片名
          // [ext]: 图片原来的扩展名
          filename: 'image/[hash:20][ext]'
        }
      }, {// 处理字体模块
        test: /\.(eot|svg|ttf|woff)$/,
        type: 'asset/resource',// 用asset/resource内置的资源类型处理字体
        generator: {
          // 打包的字体存放路径
          // [hash:10]: 用10位随机字符串作为打包的字体图标的名字(数字越大，重复的几率越低)
          // [ext]: 字体图标原来的扩展名
          filename: 'font/[hash:10][ext]'
        }
      }
    ]
  }
}